#include<bits/stdc++.h>
using namespace std;
int n,m,t;
int a[100005],c[100005],ra[100005];
int x[5];
string d[20];
int subtask(){
    vector<int>t[2];
    for(int i=1;i<=n;i++)t[0].push_back(i);
    bool f=0;
    int s=1;
    for(s;t[f].size()>1;s++){
        t[!f].clear();
        for(int i=0;i<t[f].size()/2;i++){
            if(d[s][i]){
                t[!f].push_back((ra[t[f][i*2+1]]>=s)?t[f][i*2+1]:t[f][i*2]);
            }else{
                t[!f].push_back((ra[t[f][i*2]]>=s)?t[f][i*2]:t[f][i*2+1]);
            }
        }
        f=!f;
    }
    return t[f][0];
}
int main(){
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=m;i++){
        cin>>c[i];
    }
    bool f=1;
    int k=1;
    for(int i=2;i<n;i*=2)k++;
    for(int i=1;i<=k;i++){
        cin>>d[i];
        for(int j=1;j<=k-i+1;j++){
            if(d[i][j]=='1')f=0;
        }
    }
    cin>>t;
    for(int i=1;i<=t;i++){
        for(int i=0;i<4;i++)cin>>x[i];
        for(int i=1;i<=n;i++){
            ra[i]=a[i]^x[i%4];
        }
        int ans=0;
        for(int i=1;i<=m;i++){
            if(c[i]&(c[i]-1)==0){
                ans^=subtask();
            }
        }
        cout<<ans<<endl;
    }
    fclose(stdin);
    fclose(stdout);
    return  0;
}